package modelo.tablero;

import java.util.HashMap;
import java.util.Map;

/**
 * 
 * 
 * @author Victor Del Rio
 */
public class Tablero {
	
	private static final Integer MIN_FILA = 1;
	private static final Integer MIN_COLUMNA = 1;
	private static final Integer MAX_FILA = 8;
	private static final Integer MAX_COLUMNA = 8;
	
	private Map<Coordenada, Casilla> casillas = new HashMap<Coordenada, Casilla>();
	
	/*------------------------------------ Constructors ------------------------------------*/

	public Tablero() {
		
		this.crearCasillas();
		this.asignarCasillasVecinas();
	}

	/*--------------------------------------------------------------------------------------*/
	/*------------------------------------ Public methods ----------------------------------*/

	public Casilla getCasilla(Coordenada coordenada) {
		return this.casillas.get(coordenada);
	}

	/*--------------------------------------------------------------------------------------*/
	/*----------------------------------- Private methods ----------------------------------*/

	private void crearCasillas() {
		
		Color colorInicialFila = Color.NEGRO;		
		
		for (int fila = MIN_FILA; fila <= MAX_FILA; fila++) {
			
			Color colorFila = colorInicialFila;
			
			for (int columna = MIN_COLUMNA; columna <= MAX_COLUMNA; columna++) {
				
				this.casillas.put(new Coordenada(fila, columna), new Casilla(colorFila));
				colorFila = colorFila.getOpuesto();
			}
			
			colorInicialFila = colorInicialFila.getOpuesto();
		}
	}
	
	private void asignarCasillasVecinas() {
		
		for (int fila = MIN_FILA; fila <= MAX_FILA; fila++) {
			for (int columna = MIN_COLUMNA; columna <= MAX_COLUMNA; columna++) {
				
				Coordenada coordenadaActual = new Coordenada(fila, columna);
				Casilla casillaActual = this.getCasilla(coordenadaActual);
				
				for (Direccion direccion : Direccion.values()) {
					casillaActual.setCasillaVecina(direccion, this.getCasilla(direccion.getCoordenada(coordenadaActual)));
				}
			}
		}
	}

	/*--------------------------------------------------------------------------------------*/

	
	// TODO sacar este metodo cuando ya no sea útil. Es solo para debug.
	@Override
	public String toString() {
		
		String tableroString = "";
		
		for (int fila = MAX_FILA; fila >= MIN_FILA; fila--) {
			
			for (int columna = MIN_COLUMNA; columna <= MAX_COLUMNA; columna++) {
				tableroString += this.getCasilla(new Coordenada(fila, columna)).toString() + " ";
			}
			tableroString += "\n";
		}
		return tableroString;
	}

}
